[3810] | 1 | MODULE kinetic_mod |
---|
| 2 | |
---|
| 3 | |
---|
| 4 | CONTAINS |
---|
| 5 | |
---|
| 6 | SUBROUTINE kinetic(f_ue,f_Ki) |
---|
| 7 | USE icosa |
---|
| 8 | IMPLICIT NONE |
---|
| 9 | TYPE(t_field), POINTER :: f_ue(:) |
---|
| 10 | TYPE(t_field), POINTER :: f_Ki(:) |
---|
| 11 | |
---|
| 12 | REAL(rstd), POINTER :: ue(:,:) |
---|
| 13 | REAL(rstd), POINTER :: Ki(:,:) |
---|
| 14 | INTEGER :: ind |
---|
| 15 | |
---|
| 16 | CALL transfert_request(f_ue,req_e1_vect) |
---|
| 17 | CALL transfert_request(f_ue,req_e1_vect) |
---|
| 18 | |
---|
| 19 | DO ind=1,ndomain |
---|
| 20 | IF (.NOT. assigned_domain(ind)) CYCLE |
---|
| 21 | CALL swap_dimensions(ind) |
---|
| 22 | CALL swap_geometry(ind) |
---|
| 23 | ue=f_ue(ind) |
---|
| 24 | Ki=f_Ki(ind) |
---|
| 25 | CALL compute_kinetic(ue, Ki) |
---|
| 26 | ENDDO |
---|
| 27 | |
---|
| 28 | END SUBROUTINE kinetic |
---|
| 29 | |
---|
| 30 | SUBROUTINE compute_kinetic(ue, Ki) |
---|
| 31 | USE icosa |
---|
| 32 | USE omp_para |
---|
| 33 | IMPLICIT NONE |
---|
| 34 | REAL(rstd),INTENT(IN) :: ue(3*iim*jjm,llm) |
---|
| 35 | REAL(rstd),INTENT(OUT) :: Ki(iim*jjm,llm) |
---|
| 36 | INTEGER :: i,j,ij,l |
---|
| 37 | |
---|
| 38 | DO l=ll_begin,ll_end |
---|
| 39 | DO j=jj_begin,jj_end |
---|
| 40 | DO i=ii_begin,ii_end |
---|
| 41 | ij=(j-1)*iim+i |
---|
| 42 | |
---|
| 43 | Ki(ij,l)=1/(4*Ai(ij))*(le(ij+u_right)*de(ij+u_right)*ue(ij+u_right,l)**2 + & |
---|
| 44 | le(ij+u_rup)*de(ij+u_rup)*ue(ij+u_rup,l)**2 + & |
---|
| 45 | le(ij+u_lup)*de(ij+u_lup)*ue(ij+u_lup,l)**2 + & |
---|
| 46 | le(ij+u_left)*de(ij+u_left)*ue(ij+u_left,l)**2 + & |
---|
| 47 | le(ij+u_ldown)*de(ij+u_ldown)*ue(ij+u_ldown,l)**2 + & |
---|
| 48 | le(ij+u_rdown)*de(ij+u_rdown)*ue(ij+u_rdown,l)**2 ) |
---|
| 49 | |
---|
| 50 | ENDDO |
---|
| 51 | ENDDO |
---|
| 52 | ENDDO |
---|
| 53 | |
---|
| 54 | |
---|
| 55 | END SUBROUTINE compute_kinetic |
---|
| 56 | |
---|
| 57 | END MODULE kinetic_mod |
---|