diff --git a/code/.gitignore b/code/.gitignore index b76dffd..aeffe07 100644 --- a/code/.gitignore +++ b/code/.gitignore @@ -2,3 +2,4 @@ *.so *.pyc *.ipynb +m_terms.f90 diff --git a/code/code_gen/termspecs/termspec.vnsd_fluctuation b/code/code_gen/termspecs/termspec.vnsd_fluctuation new file mode 100644 index 0000000..d65c500 --- /dev/null +++ b/code/code_gen/termspecs/termspec.vnsd_fluctuation @@ -0,0 +1,67 @@ +# fsd weighted (vn+sd) correlations + +[u, v, w, y] + +c = 1.0 - y +wrate = rxn_rate(c) +fsd = sqrt (sqr(ddx(c)) + sqr(ddy(c)) + sqr(ddz(c))) + +sd = ((d2dx(c) + d2dy(c) + d2dz(c)) * $rod + wrate) / fsd + +nx = - ddx(c) / fsd +ny = - ddy(c) / fsd +nz = - ddz(c) / fsd + +vn = u * nx + v * ny + w * nz + +divn = ddx(nx) + ddy(ny) + ddz(nz) + +divn2 = sqr(divn) + +# grad(n) : grad(n) +gradn_gradn = sqr(ddx(nx)) + sqr(ddy(ny)) + sqr(ddz(nz)) + 2*(ddx(ny)*ddy(nx)) + 2*(ddx(nz)*ddz(nx)) + 2*(ddy(nz)*ddz(ny)) + +absk = abs(divn) + +lapc = d2dx(c) + d2dy(c) + d2dz(c) + +vnsd = vn+sd + +divn_nx = divn*nx + +gradn_vnsd = ddx(vnsd) * nx + ddy(vnsd) * ny + ddz(vnsd) * nz + +gradt_vnsd1 = ddx(vnsd) - nx * gradn_vnsd + +divn2_dndn = divn2 - gradn_gradn + +sign_divn2_dndn = $dsign(divn2_dndn, divn) + +vnsd_divn_cor = vnsd' * divn' + +vnsd_divn_nx_cor = vnsd' * divn_nx' + +vnsd_divn2_dndn_cor = vnsd' * divn2_dndn' + +vnsd_sign_divn2_dndn_cor = vnsd' * sign_divn2_dndn' + +vnsd_divn_nx = vnsd * divn_nx + +vnsd_divn2_dndn = vnsd * divn2_dndn + +vnsd_sign_divn2_dndn = vnsd * sign_divn2_dndn + +avg { c, u, v, w, fsd, lapc, ddx_c, ddy_c, ddz_c, d2dx_c, d2dy_c, d2dz_c } + +avg fsd { u, v, w, nx, ny, nz, absk, divn, sd, gradt_vnsd1, +vnsd, + divn_nx, +vnsd_divn_nx, +vnsd_divn_nx_cor, + divn2_dndn, +vnsd_divn2_dndn, +vnsd_divn2_dndn_cor, + sign_divn2_dndn, +vnsd_sign_divn2_dndn, +vnsd_sign_divn2_dndn_cor +} diff --git a/code/m_terms.f90 b/code/m_terms.f90 deleted file mode 100644 index 8c14dab..0000000 --- a/code/m_terms.f90 +++ /dev/null @@ -1,329 +0,0 @@ -module m_terms - -use m_openmpi -use m_parameters -use m_arrays -use m_calculate - -implicit none - -logical, parameter :: pass2_required=.false. -character (len = *), parameter :: output_header="x avg_c avg_divn avg_fsd" -real*8, allocatable, dimension(:) :: avg_c -real*8, allocatable, dimension(:) :: avg_fsd -real*8, allocatable, dimension(:) :: avg_divn - -! field exporter common -integer(kind=MPI_OFFSET_KIND) :: offset - - -! - file_handles and mpi_infos -integer(kind=MPI_INTEGER_KIND) :: divn_fh -integer(kind=MPI_INTEGER_KIND) :: divn_info - -! - buffer -real*8, allocatable, dimension(:,:,:) :: divn_export_array - - -! - file_handles and mpi_infos -integer(kind=MPI_INTEGER_KIND) :: c_fh -integer(kind=MPI_INTEGER_KIND) :: c_info - -! - buffer -real*8, allocatable, dimension(:,:,:) :: c_export_array - - -! - file_handles and mpi_infos -integer(kind=MPI_INTEGER_KIND) :: fsd_fh -integer(kind=MPI_INTEGER_KIND) :: fsd_info - -! - buffer -real*8, allocatable, dimension(:,:,:) :: fsd_export_array - -real*8, allocatable, dimension(:,:,:) :: xyzbuffer0 -real*8, allocatable, dimension(:,:,:) :: xyzbuffer1 -real*8, allocatable, dimension(:,:,:) :: xyzbuffer2 -real*8, allocatable, dimension(:,:,:) :: xyzbuffer3 -real*8, allocatable, dimension(:,:,:) :: xyzbuffer4 - -contains - -subroutine m_terms_init - -integer :: ierr - -allocate(avg_c(nxp), stat=ierr) ; avg_c = 0. -allocate(avg_fsd(nxp), stat=ierr) ; avg_fsd = 0. -allocate(avg_divn(nxp), stat=ierr) ; avg_divn = 0. - -! init -call MPI_INFO_CREATE(divn_info, mpi_err) -call MPI_FILE_OPEN(MPI_COMM_TASK,'export-divn.dat',MPI_MODE_WRONLY+MPI_MODE_CREATE,divn_info,divn_fh,mpi_err) -allocate(divn_export_array(176:400,1:nyp,1:nzp), stat=ierr) ; divn_export_array = 0. - - -! init -call MPI_INFO_CREATE(c_info, mpi_err) -call MPI_FILE_OPEN(MPI_COMM_TASK,'export-c.dat',MPI_MODE_WRONLY+MPI_MODE_CREATE,c_info,c_fh,mpi_err) -allocate(c_export_array(176:400,1:nyp,1:nzp), stat=ierr) ; c_export_array = 0. - - -! init -call MPI_INFO_CREATE(fsd_info, mpi_err) -call MPI_FILE_OPEN(MPI_COMM_TASK,'export-fsd.dat',MPI_MODE_WRONLY+MPI_MODE_CREATE,fsd_info,fsd_fh,mpi_err) -allocate(fsd_export_array(176:400,1:nyp,1:nzp), stat=ierr) ; fsd_export_array = 0. - -allocate(xyzbuffer0(nxp,nyp,nzp), stat=ierr) ; xyzbuffer0 = 0. -allocate(xyzbuffer1(nxp,nyp,nzp), stat=ierr) ; xyzbuffer1 = 0. -allocate(xyzbuffer2(nxp,nyp,nzp), stat=ierr) ; xyzbuffer2 = 0. -allocate(xyzbuffer3(nxp,nyp,nzp), stat=ierr) ; xyzbuffer3 = 0. -allocate(xyzbuffer4(nxp,nyp,nzp), stat=ierr) ; xyzbuffer4 = 0. - -end subroutine m_terms_init - - -subroutine m_terms_finalize - -deallocate(avg_c) -deallocate(avg_fsd) -deallocate(avg_divn) - -! finalize -call MPI_FILE_CLOSE(divn_fh, mpi_err) -call MPI_INFO_FREE(divn_info, mpi_err) -deallocate(divn_export_array) - - -! finalize -call MPI_FILE_CLOSE(c_fh, mpi_err) -call MPI_INFO_FREE(c_info, mpi_err) -deallocate(c_export_array) - - -! finalize -call MPI_FILE_CLOSE(fsd_fh, mpi_err) -call MPI_INFO_FREE(fsd_info, mpi_err) -deallocate(fsd_export_array) - -deallocate(xyzbuffer0) -deallocate(xyzbuffer1) -deallocate(xyzbuffer2) -deallocate(xyzbuffer3) -deallocate(xyzbuffer4) - -end subroutine m_terms_finalize - - -subroutine m_terms_calculate_pass1(fidx) - -integer :: fidx -integer :: i, j, k - - -! c = ( 1.0 - y(i,j,k) ) -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -xyzbuffer3(i,j,k) = ( 1.0 - y(i,j,k) ) -end do -end do -end do - -! copy to array for export -do k = 1, nzp -do j = 1, nyp -do i = 176, 400 -c_export_array(i,j,k) = xyzbuffer3(i,j,k) -end do -end do -end do - -! write to file -count = (400 - 176 + 1) * (nyp - 1 + 1) * (nzp - 1 + 1) -offset = export_offset(fidx) * count * 8 -call MPI_FILE_WRITE_AT(c_fh, offset, c_export_array, count, MPI_REAL8, mpi_status, mpi_err) - - -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -avg_c(i) = avg_c(i) + xyzbuffer3(i,j,k) -end do -end do -end do - -call ddx ( xyzbuffer2, xyzbuffer3 ) -call ddy ( xyzbuffer1, xyzbuffer3 ) -call ddz ( xyzbuffer0, xyzbuffer3 ) - -! fsd = ( sqrt ( ( ( ((ddx_c(i,j,k))*(ddx_c(i,j,k))) + ((ddy_c(i,j,k))*(ddy_c(i,j,k))) ) + ((ddz_c(i,j,k))*(ddz_c(i,j,k))) ) ) ) -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -xyzbuffer3(i,j,k) = ( sqrt ( ( ( ((xyzbuffer2(i,j,k))*(xyzbuffer2(i,j,k))) + ((xyzbuffer1(i,j,k))*(xyzbuffer1(i,j,k))) ) + ((xyzbuffer0(i,j,k))*(xyzbuffer0(i,j,k))) ) ) ) -end do -end do -end do - -! copy to array for export -do k = 1, nzp -do j = 1, nyp -do i = 176, 400 -fsd_export_array(i,j,k) = xyzbuffer3(i,j,k) -end do -end do -end do - -! write to file -count = (400 - 176 + 1) * (nyp - 1 + 1) * (nzp - 1 + 1) -offset = export_offset(fidx) * count * 8 -call MPI_FILE_WRITE_AT(fsd_fh, offset, fsd_export_array, count, MPI_REAL8, mpi_status, mpi_err) - - -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -avg_fsd(i) = avg_fsd(i) + xyzbuffer3(i,j,k) -end do -end do -end do - - -! nx = ( ( - ddx_c(i,j,k) ) / fsd(i,j,k) ) -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -xyzbuffer4(i,j,k) = ( ( - xyzbuffer2(i,j,k) ) / xyzbuffer3(i,j,k) ) -end do -end do -end do - -call ddx ( xyzbuffer2, xyzbuffer4 ) - -! ny = ( ( - ddy_c(i,j,k) ) / fsd(i,j,k) ) -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -xyzbuffer4(i,j,k) = ( ( - xyzbuffer1(i,j,k) ) / xyzbuffer3(i,j,k) ) -end do -end do -end do - - -! nz = ( ( - ddz_c(i,j,k) ) / fsd(i,j,k) ) -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -xyzbuffer1(i,j,k) = ( ( - xyzbuffer0(i,j,k) ) / xyzbuffer3(i,j,k) ) -end do -end do -end do - -call ddy ( xyzbuffer3, xyzbuffer4 ) -call ddz ( xyzbuffer0, xyzbuffer1 ) - -! divn = ( ( ddx_nx(i,j,k) + ddy_ny(i,j,k) ) + ddz_nz(i,j,k) ) -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -xyzbuffer4(i,j,k) = ( ( xyzbuffer2(i,j,k) + xyzbuffer3(i,j,k) ) + xyzbuffer0(i,j,k) ) -end do -end do -end do - -! copy to array for export -do k = 1, nzp -do j = 1, nyp -do i = 176, 400 -divn_export_array(i,j,k) = xyzbuffer4(i,j,k) -end do -end do -end do - -! write to file -count = (400 - 176 + 1) * (nyp - 1 + 1) * (nzp - 1 + 1) -offset = export_offset(fidx) * count * 8 -call MPI_FILE_WRITE_AT(divn_fh, offset, divn_export_array, count, MPI_REAL8, mpi_status, mpi_err) - - -do k = 1, nzp -do j = 1, nyp -do i = 1, nxp -avg_divn(i) = avg_divn(i) + xyzbuffer4(i,j,k) -end do -end do -end do - - -end subroutine m_terms_calculate_pass1 - - -subroutine m_terms_average_pass1 (nfiles) - -integer :: nfiles -real*8 :: denum - -denum=real(nfiles*nyp*nzp) - - -call MPI_ALLREDUCE(MPI_IN_PLACE, avg_c, nxp, MPI_REAL8, MPI_SUM, MPI_COMM_TASK, mpi_err) - -avg_c = avg_c / denum - - -call MPI_ALLREDUCE(MPI_IN_PLACE, avg_divn, nxp, MPI_REAL8, MPI_SUM, MPI_COMM_TASK, mpi_err) - -avg_divn = avg_divn / denum - - -call MPI_ALLREDUCE(MPI_IN_PLACE, avg_fsd, nxp, MPI_REAL8, MPI_SUM, MPI_COMM_TASK, mpi_err) - -avg_fsd = avg_fsd / denum - - -end subroutine m_terms_average_pass1 - - -subroutine m_terms_calculate_pass2(fidx) - -integer :: fidx -integer :: i, j, k - - - -end subroutine m_terms_calculate_pass2 - - -subroutine m_terms_average_pass2 (nfiles) - -integer :: nfiles -real*8 :: denum - -denum=real(nfiles*nyp*nzp) - - - -end subroutine m_terms_average_pass2 - - -subroutine m_terms_write_result - - -integer :: i - -open (200, file="qEdge_X.dat") - -write (200,*) output_header - -do i=1,nxp - write (200,'(4e20.10)') real(i)*hxp, avg_c(i), avg_divn(i), avg_fsd(i) -end do - -close (200) - - -end subroutine m_terms_write_result - - -end module m_terms -