MODULE vorticity_mod CONTAINS SUBROUTINE vorticity(f_ue,f_vort) USE transfert_mod USE field_mod USE dimensions USE geometry USE domain_mod IMPLICIT NONE TYPE(t_field), POINTER :: f_ue(:) TYPE(t_field), POINTER :: f_vort(:) REAL(rstd), POINTER :: ue(:,:) REAL(rstd), POINTER :: vort(:,:) INTEGER :: ind CALL transfert_request(f_ue,req_e1) CALL transfert_request(f_ue,req_e1) DO ind=1,ndomain CALL swap_dimensions(ind) CALL swap_geometry(ind) ue=f_ue(ind) vort=f_vort(ind) CALL compute_vorticity(ue, vort) ENDDO END SUBROUTINE vorticity SUBROUTINE compute_vorticity(ue,vort) USE dimensions USE geometry USE metric USE disvert_mod IMPLICIT NONE REAL(rstd),INTENT(IN) :: ue(3*iim*jjm,llm) REAL(rstd),INTENT(OUT) :: vort(2*iim*jjm,llm) INTEGER :: i,j,ij,l DO l = 1,llm DO j=jj_begin-1,jj_end+1 DO i=ii_begin-1,ii_end+1 ij=(j-1)*iim+i vort(ij+z_up,l) = 1./Av(ij+z_up)*( ne(ij,rup) * ue(ij+u_rup,l) * de(ij+u_rup) & + ne(ij+t_rup,left) * ue(ij+t_rup+u_left,l) * de(ij+t_rup+u_left) & - ne(ij,lup) * ue(ij+u_lup,l) * de(ij+u_lup) ) vort(ij+z_down,l) = 1./Av(ij+z_down)*( ne(ij,ldown) * ue(ij+u_ldown,l) * de(ij+u_ldown) & + ne(ij+t_ldown,right) * ue(ij+t_ldown+u_right,l) * de(ij+t_ldown+u_right) & - ne(ij,rdown) * ue(ij+u_rdown,l) * de(ij+u_rdown) ) ENDDO ENDDO ENDDO END SUBROUTINE compute_vorticity END MODULE vorticity_mod