Changeset 413


Ignore:
Timestamp:
2006-03-20T18:27:15+01:00 (15 years ago)
Author:
opalod
Message:

nemo_v1_bugfix_032 : CT : use dt (linked to Euler time scheme) instead of 2*dt for the construction of the matrix used by the elliptic solvers

Location:
trunk/NEMO/OPA_SRC
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r392 r413  
    3333   USE prtctl          ! Print control 
    3434   USE in_out_manager  ! I/O manager 
     35   USE solmat          ! matrix construction for elliptic solvers 
    3536   USE agrif_opa_interp 
    3637 
     
    132133      z2dt = 2. * rdt                                       ! time step: leap-frog 
    133134      IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt       ! time step: Euler if restart from rest 
     135      IF( neuler == 0 .AND. kt == nit000+1 ) CALL sol_mat(kt) 
    134136      z2dtg  = grav * z2dt 
    135137      zraur  = 1. / rauw 
     
    175177 
    176178      CALL Agrif_dyn( kt ) 
    177  
    178179#endif 
    179180#if defined key_orca_r2 
     
    240241 
    241242#if defined key_agrif 
    242  
    243        If (.NOT.AGRIF_ROOT()) THEN 
    244  
     243      IF( .NOT. AGRIF_ROOT() ) THEN 
    245244         ! add contribution of gradient of after barotropic transport divergence  
    246         IF ((nbondi == -1).OR.(nbondi == 2)) gcb(3,:) = gcb(3,:) & 
    247                         -znugdt * z2dt*laplacu(2,:)*gcdprc(3,:)*hu(2,:)*e2u(2,:) 
    248         IF ((nbondi == 1).OR.(nbondi == 2))  gcb(nlci-2,:) = gcb(nlci-2,:) & 
    249                        +znugdt * z2dt*laplacu(nlci-2,:)*gcdprc(nlci-2,:)*hu(nlci-2,:)*e2u(nlci-2,:) 
    250         IF ((nbondj == -1).OR.(nbondj == 2)) gcb(:,3) = gcb(:,3) & 
    251                        -znugdt * z2dt*laplacv(:,2)*gcdprc(:,3)*hv(:,2)*e1v(:,2) 
    252         IF ((nbondj == 1).OR.(nbondj == 2))  gcb(:,nlcj-2) = gcb(:,nlcj-2) & 
    253                        +znugdt * z2dt*laplacv(:,nlcj-2)*gcdprc(:,nlcj-2)*hv(:,nlcj-2)*e1v(:,nlcj-2) 
    254  
    255        ENDIF 
    256  
     245         IF( (nbondi == -1) .OR. (nbondi == 2) ) gcb(3,:) = gcb(3,:) & 
     246            &            -znugdt * z2dt*laplacu(2,:)*gcdprc(3,:)*hu(2,:)*e2u(2,:) 
     247         IF( (nbondi ==  1) .OR. (nbondi == 2) )  gcb(nlci-2,:) = gcb(nlci-2,:) & 
     248            &           +znugdt * z2dt*laplacu(nlci-2,:)*gcdprc(nlci-2,:)*hu(nlci-2,:)*e2u(nlci-2,:) 
     249         IF( (nbondj == -1) .OR. (nbondj == 2) ) gcb(:,3) = gcb(:,3) & 
     250            &           -znugdt * z2dt*laplacv(:,2)*gcdprc(:,3)*hv(:,2)*e1v(:,2) 
     251         IF( (nbondj ==  1) .OR. (nbondj == 2) )  gcb(:,nlcj-2) = gcb(:,nlcj-2) & 
     252            &           +znugdt * z2dt*laplacv(:,nlcj-2)*gcdprc(:,nlcj-2)*hv(:,nlcj-2)*e1v(:,nlcj-2) 
     253      ENDIF 
    257254#endif 
    258255 
     
    316313 
    317314#if defined key_agrif       
    318       IF (.NOT. Agrif_Root()) THEN 
    319       ! caution : grad D (fine) = grad D (coarse) at coarse/fine interface 
    320         IF ((nbondi == -1).OR.(nbondi == 2)) spgu(2,:) = znugdt * z2dt * laplacu(2,:) * umask(2,:,1) 
    321         IF ((nbondi == 1).OR.(nbondi == 2)) spgu(nlci-2,:) = znugdt * z2dt * laplacu(nlci-2,:) * umask(nlci-2,:,1) 
    322         IF ((nbondj == -1).OR.(nbondj == 2)) spgv(:,2) = znugdt * z2dt * laplacv(:,2) * vmask(:,2,1) 
    323         IF ((nbondj == 1).OR.(nbondj == 2)) spgv(:,nlcj-2) = znugdt * z2dt * laplacv(:,nlcj-2) * vmask(:,nlcj-2,1) 
     315      IF( .NOT. Agrif_Root() ) THEN 
     316         ! caution : grad D (fine) = grad D (coarse) at coarse/fine interface 
     317         IF( (nbondi == -1) .OR. (nbondi == 2) ) spgu(2,:) = znugdt * z2dt * laplacu(2,:) * umask(2,:,1) 
     318         IF( (nbondi ==  1) .OR. (nbondi == 2) ) spgu(nlci-2,:) = znugdt * z2dt * laplacu(nlci-2,:) * umask(nlci-2,:,1) 
     319         IF( (nbondj == -1) .OR. (nbondj == 2) ) spgv(:,2) = znugdt * z2dt * laplacv(:,2) * vmask(:,2,1) 
     320         IF( (nbondj ==  1) .OR. (nbondj == 2) ) spgv(:,nlcj-2) = znugdt * z2dt * laplacv(:,nlcj-2) * vmask(:,nlcj-2,1) 
    324321      ENDIF 
    325322#endif       
  • trunk/NEMO/OPA_SRC/DYN/dynspg_flt_jki.F90

    r392 r413  
    3737   USE prtctl          ! Print control 
    3838   USE in_out_manager  ! I/O manager 
     39   USE solmat          ! matrix construction for elliptic solvers 
    3940   USE agrif_opa_interp 
    4041 
     
    138139      ! time step: Euler if restart from rest 
    139140      IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 
     141      IF( neuler == 0 .AND. kt == nit000+1 ) CALL sol_mat(kt) 
    140142      ! coefficients 
    141143      z2dtg  = grav * z2dt 
     
    183185 
    184186      CALL Agrif_dyn( kt ) 
    185  
    186187#endif 
    187188#if defined key_orca_r2 
     
    246247 
    247248#if defined key_agrif 
    248  
    249        If (.NOT.AGRIF_ROOT()) THEN 
    250  
     249      IF( .NOT. AGRIF_ROOT() ) THEN 
    251250         ! add contribution of gradient of after barotropic transport divergence  
    252         IF ((nbondi == -1).OR.(nbondi == 2)) gcb(3,:) = gcb(3,:) & 
    253                         -znugdt * z2dt*laplacu(2,:)*gcdprc(3,:)*hu(2,:)*e2u(2,:) 
    254         IF ((nbondi == 1).OR.(nbondi == 2))  gcb(nlci-2,:) = gcb(nlci-2,:) & 
    255                        +znugdt * z2dt*laplacu(nlci-2,:)*gcdprc(nlci-2,:)*hu(nlci-2,:)*e2u(nlci-2,:) 
    256         IF ((nbondj == -1).OR.(nbondj == 2)) gcb(:,3) = gcb(:,3) & 
    257                        -znugdt * z2dt*laplacv(:,2)*gcdprc(:,3)*hv(:,2)*e1v(:,2) 
    258         IF ((nbondj == 1).OR.(nbondj == 2))  gcb(:,nlcj-2) = gcb(:,nlcj-2) & 
    259                        +znugdt * z2dt*laplacv(:,nlcj-2)*gcdprc(:,nlcj-2)*hv(:,nlcj-2)*e1v(:,nlcj-2) 
    260  
    261        ENDIF 
    262  
     251        IF( (nbondi == -1) .OR. (nbondi == 2) ) gcb(3,:) = gcb(3,:) & 
     252           &            -znugdt * z2dt*laplacu(2,:)*gcdprc(3,:)*hu(2,:)*e2u(2,:) 
     253        IF( (nbondi ==  1) .OR. (nbondi == 2) )  gcb(nlci-2,:) = gcb(nlci-2,:) & 
     254           &           +znugdt * z2dt*laplacu(nlci-2,:)*gcdprc(nlci-2,:)*hu(nlci-2,:)*e2u(nlci-2,:) 
     255        IF( (nbondj == -1) .OR. (nbondj == 2) ) gcb(:,3) = gcb(:,3) & 
     256           &           -znugdt * z2dt*laplacv(:,2)*gcdprc(:,3)*hv(:,2)*e1v(:,2) 
     257        IF( (nbondj ==  1) .OR. (nbondj == 2) )  gcb(:,nlcj-2) = gcb(:,nlcj-2) & 
     258           &           +znugdt * z2dt*laplacv(:,nlcj-2)*gcdprc(:,nlcj-2)*hv(:,nlcj-2)*e1v(:,nlcj-2) 
     259      ENDIF 
    263260#endif 
    264261 
     
    336333          
    337334#if defined key_agrif       
    338       IF (.NOT. Agrif_Root()) THEN 
    339       ! caution : grad D (fine) = grad D (coarse) at coarse/fine interface 
    340         IF ((nbondi == -1).OR.(nbondi == 2)) spgu(2,:) = znugdt * z2dt * laplacu(2,:) * umask(2,:,1) 
    341         IF ((nbondi == 1).OR.(nbondi == 2)) spgu(nlci-2,:) = znugdt * z2dt * laplacu(nlci-2,:) * umask(nlci-2,:,1) 
    342         IF ((nbondj == -1).OR.(nbondj == 2)) spgv(:,2) = znugdt * z2dt * laplacv(:,2) * vmask(:,2,1) 
    343         IF ((nbondj == 1).OR.(nbondj == 2)) spgv(:,nlcj-2) = znugdt * z2dt * laplacv(:,nlcj-2) * vmask(:,nlcj-2,1) 
     335      IF( .NOT. Agrif_Root() ) THEN 
     336         ! caution : grad D (fine) = grad D (coarse) at coarse/fine interface 
     337         IF( (nbondi == -1) .OR. (nbondi == 2) ) spgu(2,:) = znugdt * z2dt * laplacu(2,:) * umask(2,:,1) 
     338         IF( (nbondi ==  1) .OR. (nbondi == 2) ) spgu(nlci-2,:) = znugdt * z2dt * laplacu(nlci-2,:) * umask(nlci-2,:,1) 
     339         IF( (nbondj == -1) .OR. (nbondj == 2) ) spgv(:,2) = znugdt * z2dt * laplacv(:,2) * vmask(:,2,1) 
     340         IF( (nbondj ==  1) .OR. (nbondj == 2) ) spgv(:,nlcj-2) = znugdt * z2dt * laplacv(:,nlcj-2) * vmask(:,nlcj-2,1) 
    344341      ENDIF 
    345342#endif 
  • trunk/NEMO/OPA_SRC/SOL/solmat.F90

    r392 r413  
    1919   USE lbclnk          ! lateral boudary conditions 
    2020   USE lib_mpp         ! distributed memory computing 
     21   USE in_out_manager  ! I/O manager 
    2122 
    2223   IMPLICIT NONE 
     
    3334CONTAINS 
    3435 
    35    SUBROUTINE sol_mat 
     36   SUBROUTINE sol_mat( kt ) 
    3637      !!---------------------------------------------------------------------- 
    3738      !!                  ***  ROUTINE sol_mat  *** 
     
    6768      !!   9.0  !  05-11  (V. Garnier) Surface pressure gradient organization 
    6869      !!---------------------------------------------------------------------- 
     70      !! * Arguments 
     71      INTEGER, INTENT(in) :: kt 
     72 
    6973      !! * Local declarations 
    7074      INTEGER ::   ji, jj                    ! dummy loop indices 
     
    9397      gcdmat(:,:) = 0.e0 
    9498       
    95       z2dt = 2. * rdt 
     99      IF( neuler == 0 .AND. kt == nit000 ) THEN 
     100         z2dt = rdt 
     101      ELSE 
     102         z2dt = 2. * rdt 
     103      ENDIF 
    96104 
    97105#if defined key_dynspg_flt && ! defined key_obc 
  • trunk/NEMO/OPA_SRC/SOL/solver.F90

    r389 r413  
    3131CONTAINS 
    3232 
    33    SUBROUTINE solver_init 
     33   SUBROUTINE solver_init( kt ) 
    3434      !!---------------------------------------------------------------------- 
    3535      !!                  ***  ROUTINE solver_init  *** 
     
    7777      !!    "   !  05-11  (V. Garnier) Surface pressure gradient organization 
    7878      !!---------------------------------------------------------------------- 
     79      !! * Arguments 
     80      INTEGER, INTENT(in) :: kt 
     81 
    7982      !! * Local declarations 
    8083      INTEGER :: ji, jj   ! dummy loop indices 
     
    232235      ! ------------------------------------------ 
    233236 
    234       CALL sol_mat 
     237      CALL sol_mat( kt ) 
    235238 
    236239 
  • trunk/NEMO/OPA_SRC/opa.F90

    r392 r413  
    310310      IF( lk_obc    )   CALL obc_init       ! Open boundaries  
    311311 
     312      CALL day( nit000 )                    ! Calendar 
     313 
     314      CALL istate_init                      ! ocean initial state (Dynamics and tracers) 
     315 
    312316      IF( lk_dynspg_flt .OR. lk_dynspg_rl ) THEN 
    313       CALL solver_init                      ! Elliptic solver 
    314       ENDIF 
    315  
    316       CALL day( nit000 )                    ! Calendar 
    317  
    318       CALL istate_init                      ! ocean initial state (Dynamics and tracers) 
     317         CALL solver_init( nit000 )         ! Elliptic solver 
     318      ENDIF 
     319 
    319320!!add 
    320321                       CALL eos( tb, sb, rhd, rhop )        ! before potential and in situ densities 
Note: See TracChangeset for help on using the changeset viewer.