Changeset 686 for codes/icosagcm


Ignore:
Timestamp:
03/08/18 12:48:37 (6 years ago)
Author:
dubos
Message:

devel/unstructured : piecewise-constant vertical remapping

Location:
codes/icosagcm/devel/src
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/src/icosa_init.f90

    r642 r686  
    109109  SUBROUTINE force_recompile_unstructured 
    110110    USE timestep_unstructured_mod 
     111    USE transport_unstructured_mod 
    111112  END SUBROUTINE force_recompile_unstructured 
    112113 
  • codes/icosagcm/devel/src/kernels_unst/caldyn_wflux.k90

    r624 r686  
    77         convm(l,ij) = convm(l,ij) + convm(l+1,ij) 
    88      END DO 
    9       l=1 
    10       dmass_col(ij) = convm(l,ij) 
     9      dmass_col(ij) = convm(1,ij) 
    1110      DO l = 2,llm 
    1211         ! Compute vertical mass flux (l=1,llm+1 set to zero at init) 
  • codes/icosagcm/devel/src/kernels_unst/compute_NH_geopot.k90

    r658 r686  
    5252      DO ij=1,primal_num 
    5353         ! Compute residual R_il and B_il 
    54          l=1 
    5554         ! bottom interface l=1 
    56          ml_g2 = gm2*m_il(l,ij) 
    57          B_il(l,ij) = A_ik(l,ij) + ml_g2 + tau2_g*rho_bot 
    58          R_il(l,ij) = ml_g2*( Phi_il(l,ij)-Phi_star_il(l,ij)) & 
    59          + tau2_g*( p_ik(l,ij)-pbot+rho_bot*(Phi_il(l,ij)-PHI_BOT(ij)) ) 
     55         ml_g2 = gm2*m_il(1,ij) 
     56         B_il(1,ij) = A_ik(1,ij) + ml_g2 + tau2_g*rho_bot 
     57         R_il(1,ij) = ml_g2*( Phi_il(1,ij)-Phi_star_il(1,ij)) & 
     58         + tau2_g*( p_ik(1,ij)-pbot+rho_bot*(Phi_il(1,ij)-PHI_BOT(ij)) ) 
    6059         DO l = 2,llm 
    6160            ! inner interfaces 
     
    6867            ! and residual = tau^2*(ml+(1/g)dl_pi)=0 
    6968         END DO 
    70          l=llm+1 
    7169         ! top interface l=llm+1 
    72          ml_g2 = gm2*m_il(l,ij) 
    73          B_il(l,ij) = A_ik(l-1,ij) + ml_g2 
    74          R_il(l,ij) = ml_g2*( Phi_il(l,ij)-Phi_star_il(l,ij)) & 
    75          + tau2_g*( ptop-p_ik(l-1,ij) ) 
     70         ml_g2 = gm2*m_il(llm+1,ij) 
     71         B_il(llm+1,ij) = A_ik(llm+1 -1,ij) + ml_g2 
     72         R_il(llm+1,ij) = ml_g2*( Phi_il(llm+1,ij)-Phi_star_il(llm+1,ij)) & 
     73         + tau2_g*( ptop-p_ik(llm+1 -1,ij) ) 
    7674         ! 
    7775         ! Forward sweep : 
    7876         ! C(0)=0, C(l) = -A(l) / (B(l)+A(l-1)C(l-1)), 
    7977         ! D(0)=0, D(l) = (R(l)+A(l-1)D(l-1)) / (B(l)+A(l-1)C(l-1)) 
    80          l=1 
    81          X_ij = 1./B_il(l,ij) 
    82          C_ik(l,ij) = -A_ik(l,ij) * X_ij 
    83          D_il(l,ij) = R_il(l,ij) * X_ij 
     78         X_ij = 1./B_il(1,ij) 
     79         C_ik(1,ij) = -A_ik(1,ij) * X_ij 
     80         D_il(1,ij) = R_il(1,ij) * X_ij 
    8481         DO l = 2,llm 
    8582            X_ij = 1./( B_il(l,ij) + A_ik(l-1,ij)*C_ik(l-1,ij) ) 
     
    8784            D_il(l,ij) = (R_il(l,ij)+A_ik(l-1,ij)*D_il(l-1,ij)) * X_ij 
    8885         END DO 
    89          l=llm+1 
    90          X_ij = 1./( B_il(l,ij) + A_ik(l-1,ij)*C_ik(l-1,ij) ) 
    91          D_il(l,ij) = (R_il(l,ij)+A_ik(l-1,ij)*D_il(l-1,ij)) * X_ij 
     86         X_ij = 1./( B_il(llm+1,ij) + A_ik(llm+1 -1,ij)*C_ik(llm+1 -1,ij) ) 
     87         D_il(llm+1,ij) = (R_il(llm+1,ij)+A_ik(llm+1 -1,ij)*D_il(llm+1 -1,ij)) * X_ij 
    9288         ! Back substitution : 
    9389         ! x(i) = D(i)-C(i)x(i+1), x(llm+1)=0 
    9490         ! + Newton-Raphson update 
    9591         ! top interface l=llm+1 
    96          x_il(l,ij) = D_il(l,ij) 
    97          Phi_il(l,ij) = Phi_il(l,ij) - x_il(l,ij) 
     92         x_il(llm+1,ij) = D_il(llm+1,ij) 
     93         Phi_il(llm+1,ij) = Phi_il(llm+1,ij) - x_il(llm+1,ij) 
    9894         DO l = llm,1,-1 
    9995            ! Back substitution at lower interfaces 
  • codes/icosagcm/devel/src/kernels_unst/compute_geopot.k90

    r614 r686  
    66      !$OMP DO SCHEDULE(STATIC) 
    77      DO ij=1,primal_num 
    8          l=llm 
    9          pk(l,ij) = ptop + .5*g* theta(l,ij,1)*rhodz(l,ij) 
     8         pk(llm,ij) = ptop + .5*g* theta(llm,ij,1)*rhodz(llm,ij) 
    109         DO l = llm-1,1,-1 
    1110            pk(l,ij) = pk(l+1,ij) + (.5*g)*( theta(l,ij,1)*rhodz(l,ij) + theta(l+1,ij,1)*rhodz(l+1,ij) ) 
    1211         END DO 
    1312         IF(caldyn_eta == eta_lag) THEN 
    14             l=1 
    15             ps(ij) = pk(l,ij) + .5*g* theta(l,ij,1)*rhodz(l,ij) 
     13            ps(ij) = pk(1,ij) + .5*g* theta(1,ij,1)*rhodz(1,ij) 
    1614         END IF 
    1715      END DO 
     
    2927      !$OMP DO SCHEDULE(STATIC) 
    3028      DO ij=1,primal_num 
    31          l=llm 
    32          pk(l,ij) = ptop + .5*g* rhodz(l,ij) 
     29         pk(llm,ij) = ptop + .5*g* rhodz(llm,ij) 
    3330         DO l = llm-1,1,-1 
    3431            pk(l,ij) = pk(l+1,ij) + (.5*g)*( rhodz(l,ij) + rhodz(l+1,ij) ) 
    3532         END DO 
    3633         IF(caldyn_eta == eta_lag) THEN 
    37             l=1 
    38             ps(ij) = pk(l,ij) + .5*g* rhodz(l,ij) 
     34            ps(ij) = pk(1,ij) + .5*g* rhodz(1,ij) 
    3935         END IF 
    4036      END DO 
     
    5450      !$OMP DO SCHEDULE(STATIC) 
    5551      DO ij=1,primal_num 
    56          l=llm 
    57          pk(l,ij) = ptop + .5*g* rhodz(l,ij) 
     52         pk(llm,ij) = ptop + .5*g* rhodz(llm,ij) 
    5853         DO l = llm-1,1,-1 
    5954            pk(l,ij) = pk(l+1,ij) + (.5*g)*( rhodz(l,ij) + rhodz(l+1,ij) ) 
    6055         END DO 
    6156         IF(caldyn_eta == eta_lag) THEN 
    62             l=1 
    63             ps(ij) = pk(l,ij) + .5*g* rhodz(l,ij) 
     57            ps(ij) = pk(1,ij) + .5*g* rhodz(1,ij) 
    6458         END IF 
    6559      END DO 
     
    7973      !$OMP DO SCHEDULE(STATIC) 
    8074      DO ij=1,primal_num 
    81          l=llm 
    82          pk(l,ij) = ptop + .5*g* rhodz(l,ij)*(1.+theta(l,ij,2)) 
     75         pk(llm,ij) = ptop + .5*g* rhodz(llm,ij)*(1.+theta(llm,ij,2)) 
    8376         DO l = llm-1,1,-1 
    8477            pk(l,ij) = pk(l+1,ij) + (.5*g)*( rhodz(l,ij)*(1.+theta(l,ij,2)) + rhodz(l+1,ij)*(1.+theta(l+1,ij,2)) ) 
    8578         END DO 
    8679         IF(caldyn_eta == eta_lag) THEN 
    87             l=1 
    88             ps(ij) = pk(l,ij) + .5*g* rhodz(l,ij)*(1.+theta(l,ij,2)) 
     80            ps(ij) = pk(1,ij) + .5*g* rhodz(1,ij)*(1.+theta(1,ij,2)) 
    8981         END IF 
    9082      END DO 
  • codes/icosagcm/devel/src/kernels_unst/theta.k90

    r658 r686  
    77      !$OMP DO SCHEDULE(STATIC) 
    88      DO ij=1,primal_num 
    9          l=0 
    109         mass_col(ij)=0. 
    1110         DO l = 1,llm 
Note: See TracChangeset for help on using the changeset viewer.