Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
parent
dd7fbff499
commit
12dad7c28e
141
src/SimNDT/engine/EFIT2Dcython.pyx
Normal file
141
src/SimNDT/engine/EFIT2Dcython.pyx
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
cimport cython
|
||||||
|
cimport numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
@cython.boundscheck(False) # turn of bounds-checking for entire function
|
||||||
|
@cython.wraparound(False)
|
||||||
|
def sourceVel(np.float32_t[:,:] Vx, np.float32_t[:,:] Vy,
|
||||||
|
np.int32_t[:] XL,
|
||||||
|
np.int32_t[:] YL,
|
||||||
|
double source, int Stype, win, double dtdxx):
|
||||||
|
|
||||||
|
cdef unsigned int i
|
||||||
|
cdef int ii, jj
|
||||||
|
cdef int N = XL.shape[0]
|
||||||
|
|
||||||
|
if Stype == 0:
|
||||||
|
for i in range(N):
|
||||||
|
ii = XL[i]
|
||||||
|
jj = YL[i]
|
||||||
|
Vx[ii, jj] -= source*dtdxx * win[i]
|
||||||
|
|
||||||
|
elif Stype ==1:
|
||||||
|
for i in range(N):
|
||||||
|
ii = XL[i]
|
||||||
|
jj = YL[i]
|
||||||
|
Vy[ii,jj] -= source*dtdxx * win[i]
|
||||||
|
|
||||||
|
elif Stype ==2:
|
||||||
|
for i in range(N):
|
||||||
|
ii = XL[i]
|
||||||
|
jj = YL[i]
|
||||||
|
Vx[ii,jj] -= source* dtdxx * win[i]
|
||||||
|
Vy[ii,jj] -= source* dtdxx * win[i]
|
||||||
|
|
||||||
|
|
||||||
|
return (Vx, Vy)
|
||||||
|
|
||||||
|
|
||||||
|
@cython.boundscheck(False) # turn of bounds-checking for entire function
|
||||||
|
@cython.wraparound(False)
|
||||||
|
def sourceStress(np.float32_t[:,:] Txx, np.float32_t[:,:] Tyy,
|
||||||
|
np.int32_t[:] XL, np.int32_t[:] YL,
|
||||||
|
double source, int Stype, win, double dtdxx):
|
||||||
|
|
||||||
|
cdef int N = XL.shape[0]
|
||||||
|
cdef unsigned int i
|
||||||
|
cdef int ii, jj
|
||||||
|
|
||||||
|
if Stype ==0:
|
||||||
|
for i in range(0, N):
|
||||||
|
Txx[XL[i],YL[i]] -= source*dtdxx * win[i]
|
||||||
|
|
||||||
|
elif Stype ==1:
|
||||||
|
for i in range(0, N):
|
||||||
|
Tyy[XL[i],YL[i]] -= source*dtdxx * win[i]
|
||||||
|
|
||||||
|
elif Stype ==2:
|
||||||
|
for i in range(0, N):
|
||||||
|
Txx[XL[i],YL[i]] -= source* dtdxx * win[i]
|
||||||
|
Tyy[XL[i],YL[i]] -= source* dtdxx * win[i]
|
||||||
|
|
||||||
|
|
||||||
|
return (Txx, Tyy)
|
||||||
|
|
||||||
|
|
||||||
|
@cython.boundscheck(False)
|
||||||
|
@cython.wraparound(False)
|
||||||
|
def velocityVoigt(np.float32_t[:,:] Txx, np.float32_t[:,:] Txy, np.float32_t[:,:] Tyy,
|
||||||
|
np.float32_t[:,:] vx, np.float32_t[:,:] vy, np.float32_t[:,:] d_vx, np.float32_t[:,:] d_vy,
|
||||||
|
np.float32_t[:,:] BX, np.float32_t[:,:] BY, np.float32_t[:,:] ABS, double ddx, double dt):
|
||||||
|
|
||||||
|
|
||||||
|
cdef int M = Txx.shape[0]
|
||||||
|
cdef int N = Txx.shape[1]
|
||||||
|
cdef int i
|
||||||
|
cdef int j
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(0,M-1):
|
||||||
|
for j in range(1,N):
|
||||||
|
d_vx[i,j] = (BX[i,j] * ddx) * ( Txx[i+1,j] - Txx[i,j] + Txy[i,j] - Txy[i,j-1] )
|
||||||
|
vx[i,j] += dt * d_vx[i,j]
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(1,M):
|
||||||
|
for j in range(0, N-1):
|
||||||
|
d_vy[i,j] = (BY[i,j] * ddx) * ( Txy[i,j] - Txy[i-1,j] + Tyy[i,j+1] - Tyy[i,j] )
|
||||||
|
vy[i,j] += dt * d_vy[i,j]
|
||||||
|
|
||||||
|
for i in range(0,M):
|
||||||
|
for j in range(0,N):
|
||||||
|
vx[i,j] *= ABS[i,j]
|
||||||
|
vy[i,j] *= ABS[i,j]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return (vx, vy, d_vx, d_vy)
|
||||||
|
|
||||||
|
|
||||||
|
@cython.boundscheck(False) # turn of bounds-checking for entire function
|
||||||
|
@cython.wraparound(False)
|
||||||
|
def stressVoigt(np.float32_t[:,:] Txx, np.float32_t[:,:] Txy, np.float32_t[:,:] Tyy,
|
||||||
|
np.float32_t[:,:] vx, np.float32_t[:,:] vy, np.float32_t[:,:] d_vx, np.float32_t[:,:] d_vy,
|
||||||
|
np.float32_t[:,:] C11, np.float32_t[:,:] C12, np.float32_t[:,:] C44,
|
||||||
|
np.float32_t[:,:] ETA_VS, np.float32_t[:,:] ETA_S, np.float32_t[:,:] ETA_SS,
|
||||||
|
np.float32_t[:,:] ABS, double dtx):
|
||||||
|
|
||||||
|
|
||||||
|
cdef int M = Txx.shape[0]
|
||||||
|
cdef int N = Txx.shape[1]
|
||||||
|
cdef int i
|
||||||
|
cdef int j
|
||||||
|
|
||||||
|
for i in range(1,M):
|
||||||
|
for j in range(1,N):
|
||||||
|
Txx[i,j] += ( ( C11[i,j] * dtx )*(vx[i,j] - vx[i-1,j]) +
|
||||||
|
( C12[i,j] * dtx )*(vy[i,j] - vy[i,j-1]) +
|
||||||
|
( (ETA_VS[i,j]) * dtx) * (d_vx[i,j] - d_vx[i-1,j]) +
|
||||||
|
( (ETA_S [i,j]) * dtx) * (d_vy[i,j] - d_vy[i,j-1]) )
|
||||||
|
|
||||||
|
Tyy[i,j] += ( ( C12[i,j]* dtx )*(vx[i,j] - vx[i-1,j]) +
|
||||||
|
( C11[i,j]* dtx )*(vy[i,j] - vy[i,j-1]) +
|
||||||
|
( (ETA_VS[i,j])*dtx) *(d_vy[i,j] - d_vy[i,j-1]) +
|
||||||
|
( (ETA_S [i,j])*dtx) * (d_vx[i,j] - d_vx[i-1,j]) )
|
||||||
|
|
||||||
|
for i in range(0, M-1):
|
||||||
|
for j in range(0, N-1):
|
||||||
|
Txy[i,j] += ( ( C44[i,j] * dtx )*(vx[i,j+1] - vx[i,j] + vy[i+1,j] - vy[i,j]) +
|
||||||
|
( ETA_SS[i,j] * dtx )*(d_vx[i,j+1] - d_vx[i,j] + d_vy[i+1,j] - d_vy[i,j] ) )
|
||||||
|
|
||||||
|
for i in range(0,M):
|
||||||
|
for j in range(0,N):
|
||||||
|
Txx[i,j] *= ABS[i,j];
|
||||||
|
Tyy[i,j] *= ABS[i,j];
|
||||||
|
Txy[i,j] *= ABS[i,j];
|
||||||
|
|
||||||
|
|
||||||
|
return (Txx, Tyy, Txy)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user