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

devel/unstructured : piecewise-constant vertical remapping

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.