Skip to content

Commit 8cd27b3

Browse files
committed
add EM model:resistive heating 2d
1 parent 9c098bc commit 8cd27b3

22 files changed

+1581
-130
lines changed
26.1 KB
Loading

examples/EM/em_resistive_heating.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454

5555
matelastic1 = MatElastic(mass_density=8000, young_modulus=1e11, poisson_ratio=0.33)
5656
matelastic2 = MatElastic(mass_density=7000, young_modulus=1e11, poisson_ratio=0.33)
57-
matelastic1.set_electromagnetic_property(material_type=EMMATTYPE.CONDUCTOR, initial_conductivity=6e7)
58-
matelastic2.set_electromagnetic_property(material_type=EMMATTYPE.CONDUCTOR, initial_conductivity=4e6,eos=EMEOSTabulated1(Curve(x=[0, 25, 50, 100], y=[4e6, 4e6, 4e5, 4e5])))
57+
matelastic1.set_em_permeability_equal(material_type=EMMATTYPE.CONDUCTOR, initial_conductivity=6e7)
58+
matelastic2.set_em_permeability_equal(material_type=EMMATTYPE.CONDUCTOR, initial_conductivity=4e6,eos=EMEOSTabulated1(Curve(x=[0, 25, 50, 100], y=[4e6, 4e6, 4e5, 4e5])))
5959

6060
matthermaliso1 = MatThermalIsotropic(density=8000,specific_heat=400, conductivity=400)
6161
matthermaliso2 = MatThermalIsotropic(density=7000,specific_heat=450, conductivity=40)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
"""
2+
Resistive heating 2D
3+
====================
4+
5+
This example features a simple metal bar where potential is imposed on both ends. \n
6+
LS-DYNA version : ls-dyna_smp_d_R13.1_138-g8429c8a10f_winx64_ifort190.exe
7+
"""
8+
9+
import os
10+
import sys
11+
12+
from ansys.dyna.core.pre.dynasolution import DynaSolution
13+
from ansys.dyna.core.pre.dynaem import (
14+
DynaEM,
15+
PartSet,
16+
NodeSet,
17+
Curve,
18+
ShellPart,
19+
ShellFormulation,
20+
FEMSOLVER,
21+
ThermalAnalysis,
22+
ThermalAnalysisType,
23+
EMType,
24+
Isopotential_ConnType,
25+
Isopotential
26+
)
27+
from ansys.dyna.core.pre.dynamaterial import MatRigid,MatThermalIsotropic,EMMATTYPE,EMEOSTabulated1
28+
from ansys.dyna.core.pre import examples
29+
# sphinx_gallery_thumbnail_path = '_static/pre/em/resistive_heating_2d.png'
30+
31+
hostname = "localhost"
32+
if len(sys.argv) > 1:
33+
hostname = sys.argv[1]
34+
35+
solution = DynaSolution(hostname)
36+
fns = []
37+
path = examples.em_resistive_heating_2d + os.sep
38+
fns.append(path + "em_resistive_heating_2d.k")
39+
solution.open_files(fns)
40+
solution.set_termination(termination_time=0.0101)
41+
solution.create_database_binary(dt=1e-4)
42+
43+
emobj = DynaEM()
44+
solution.add(emobj)
45+
46+
emobj.set_timestep(tssfac=1,timestep_size_for_mass_scaled=1e-4)
47+
48+
emobj.analysis.set_timestep(timestep=1e-4)
49+
emobj.analysis.set_em_solver(type=EMType.RESISTIVE_HEATING)
50+
emobj.analysis.set_solver_fem(solver=FEMSOLVER.DIRECT_SOLVER, relative_tol=1e-3)
51+
52+
tanalysis = ThermalAnalysis()
53+
tanalysis.set_timestep(initial_timestep=1e-4)
54+
tanalysis.set_solver(analysis_type=ThermalAnalysisType.TRANSIENT)
55+
emobj.add(tanalysis)
56+
57+
matrigid = MatRigid(mass_density=1, young_modulus=2e11)
58+
matrigid.set_em_resistive_heating_2d(material_type=EMMATTYPE.CONDUCTOR, initial_conductivity=1e4)
59+
60+
matthermaliso = MatThermalIsotropic(density=100,specific_heat=10, conductivity=7)
61+
62+
part = ShellPart(1)
63+
part.set_material(matrigid,matthermaliso)
64+
part.set_element_formulation(ShellFormulation.PLANE_STRESS)
65+
emobj.parts.add(part)
66+
67+
emobj.boundaryconditions.create_imposed_motion(PartSet([1]), Curve(x=[0,10],y=[10,10]))
68+
emobj.set_init_temperature(temp=25)
69+
emobj.connect_isopotential(contype = Isopotential_ConnType.VOLTAGE_SOURCE,isopotential1 = Isopotential(NodeSet([521,517,513,509,525])),value=500)
70+
emobj.connect_isopotential(contype = Isopotential_ConnType.VOLTAGE_SOURCE,isopotential1 = Isopotential(NodeSet([585,605,625,564,565])))
71+
72+
emobj.create_em_output(mats=2, matf=2, sols=2, solf=2)
73+
74+
solution.save_file()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. .\kwprocess.proto

src/ansys/dyna/core/pre/Server/kwprocess.proto

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1695,6 +1695,7 @@ message EMMat001Request {
16951695
int32 mid = 1;
16961696
int32 mtype = 2;
16971697
float sigma = 3;
1698+
int32 eosid = 4;
16981699
}
16991700

17001701
message EMMat001Reply {
@@ -1713,6 +1714,48 @@ message EMMat002Reply {
17131714
int32 answer = 1;
17141715
}
17151716

1717+
message EMMat004Request {
1718+
int32 mid = 1;
1719+
int32 mtype = 2;
1720+
float sigma = 3;
1721+
}
1722+
1723+
message EMMat004Reply {
1724+
int32 answer = 1;
1725+
}
1726+
1727+
message EMIsopotentialRequest {
1728+
int32 isoid = 1;
1729+
int32 settype = 2;
1730+
int32 setid = 3;
1731+
}
1732+
1733+
message EMIsopotentialReply {
1734+
int32 id = 1;
1735+
}
1736+
1737+
message EMIsopotentialConnectRequest {
1738+
int32 conid = 1;
1739+
int32 contype = 2;
1740+
int32 isoid1 = 3;
1741+
int32 isoid2 = 4;
1742+
float val = 5;
1743+
}
1744+
1745+
message EMIsopotentialConnectReply {
1746+
int32 id = 1;
1747+
}
1748+
1749+
message EMIsopotentialRogoRequest {
1750+
int32 isoid = 1;
1751+
int32 settype = 2;
1752+
int32 setid = 3;
1753+
}
1754+
1755+
message EMIsopotentialRogoReply {
1756+
int32 id = 1;
1757+
}
1758+
17161759
message EMSolverBemRequest {
17171760
float reltol = 1;
17181761
int32 maxite = 2;
@@ -2025,6 +2068,10 @@ service kwC2S {
20252068
rpc CreateEMCircuit(EMCircuitRequest) returns (EMCircuitReply) {}
20262069
rpc CreateEMMat001(EMMat001Request) returns (EMMat001Reply) {}
20272070
rpc CreateEMMat002(EMMat002Request) returns (EMMat002Reply) {}
2071+
rpc CreateEMMat004(EMMat004Request) returns (EMMat004Reply) {}
2072+
rpc CreateEMIsopotential(EMIsopotentialRequest) returns (EMIsopotentialReply) {}
2073+
rpc CreateEMIsopotentialConnect(EMIsopotentialConnectRequest) returns (EMIsopotentialConnectReply) {}
2074+
rpc CreateEMIsopotentialRogo(EMIsopotentialRogoRequest) returns (EMIsopotentialRogoReply) {}
20282075
rpc CreateEMSolverBem(EMSolverBemRequest) returns (EMSolverBemReply) {}
20292076
rpc CreateEMSolverFem(EMSolverFemRequest) returns (EMSolverFemReply) {}
20302077
rpc CreateEMSolverBemMat(EMSolverBemMatRequest) returns (EMSolverBemMatReply) {}

src/ansys/dyna/core/pre/Server/kwprocess_pb2.py

Lines changed: 134 additions & 54 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ansys/dyna/core/pre/Server/kwprocess_pb2_grpc.py

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,26 @@ def __init__(self, channel):
739739
request_serializer=kwprocess__pb2.EMMat002Request.SerializeToString,
740740
response_deserializer=kwprocess__pb2.EMMat002Reply.FromString,
741741
)
742+
self.CreateEMMat004 = channel.unary_unary(
743+
'/kwgrpc.kwC2S/CreateEMMat004',
744+
request_serializer=kwprocess__pb2.EMMat004Request.SerializeToString,
745+
response_deserializer=kwprocess__pb2.EMMat004Reply.FromString,
746+
)
747+
self.CreateEMIsopotential = channel.unary_unary(
748+
'/kwgrpc.kwC2S/CreateEMIsopotential',
749+
request_serializer=kwprocess__pb2.EMIsopotentialRequest.SerializeToString,
750+
response_deserializer=kwprocess__pb2.EMIsopotentialReply.FromString,
751+
)
752+
self.CreateEMIsopotentialConnect = channel.unary_unary(
753+
'/kwgrpc.kwC2S/CreateEMIsopotentialConnect',
754+
request_serializer=kwprocess__pb2.EMIsopotentialConnectRequest.SerializeToString,
755+
response_deserializer=kwprocess__pb2.EMIsopotentialConnectReply.FromString,
756+
)
757+
self.CreateEMIsopotentialRogo = channel.unary_unary(
758+
'/kwgrpc.kwC2S/CreateEMIsopotentialRogo',
759+
request_serializer=kwprocess__pb2.EMIsopotentialRogoRequest.SerializeToString,
760+
response_deserializer=kwprocess__pb2.EMIsopotentialRogoReply.FromString,
761+
)
742762
self.CreateEMSolverBem = channel.unary_unary(
743763
'/kwgrpc.kwC2S/CreateEMSolverBem',
744764
request_serializer=kwprocess__pb2.EMSolverBemRequest.SerializeToString,
@@ -1688,6 +1708,30 @@ def CreateEMMat002(self, request, context):
16881708
context.set_details('Method not implemented!')
16891709
raise NotImplementedError('Method not implemented!')
16901710

1711+
def CreateEMMat004(self, request, context):
1712+
"""Missing associated documentation comment in .proto file."""
1713+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1714+
context.set_details('Method not implemented!')
1715+
raise NotImplementedError('Method not implemented!')
1716+
1717+
def CreateEMIsopotential(self, request, context):
1718+
"""Missing associated documentation comment in .proto file."""
1719+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1720+
context.set_details('Method not implemented!')
1721+
raise NotImplementedError('Method not implemented!')
1722+
1723+
def CreateEMIsopotentialConnect(self, request, context):
1724+
"""Missing associated documentation comment in .proto file."""
1725+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1726+
context.set_details('Method not implemented!')
1727+
raise NotImplementedError('Method not implemented!')
1728+
1729+
def CreateEMIsopotentialRogo(self, request, context):
1730+
"""Missing associated documentation comment in .proto file."""
1731+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1732+
context.set_details('Method not implemented!')
1733+
raise NotImplementedError('Method not implemented!')
1734+
16911735
def CreateEMSolverBem(self, request, context):
16921736
"""Missing associated documentation comment in .proto file."""
16931737
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -2483,6 +2527,26 @@ def add_kwC2SServicer_to_server(servicer, server):
24832527
request_deserializer=kwprocess__pb2.EMMat002Request.FromString,
24842528
response_serializer=kwprocess__pb2.EMMat002Reply.SerializeToString,
24852529
),
2530+
'CreateEMMat004': grpc.unary_unary_rpc_method_handler(
2531+
servicer.CreateEMMat004,
2532+
request_deserializer=kwprocess__pb2.EMMat004Request.FromString,
2533+
response_serializer=kwprocess__pb2.EMMat004Reply.SerializeToString,
2534+
),
2535+
'CreateEMIsopotential': grpc.unary_unary_rpc_method_handler(
2536+
servicer.CreateEMIsopotential,
2537+
request_deserializer=kwprocess__pb2.EMIsopotentialRequest.FromString,
2538+
response_serializer=kwprocess__pb2.EMIsopotentialReply.SerializeToString,
2539+
),
2540+
'CreateEMIsopotentialConnect': grpc.unary_unary_rpc_method_handler(
2541+
servicer.CreateEMIsopotentialConnect,
2542+
request_deserializer=kwprocess__pb2.EMIsopotentialConnectRequest.FromString,
2543+
response_serializer=kwprocess__pb2.EMIsopotentialConnectReply.SerializeToString,
2544+
),
2545+
'CreateEMIsopotentialRogo': grpc.unary_unary_rpc_method_handler(
2546+
servicer.CreateEMIsopotentialRogo,
2547+
request_deserializer=kwprocess__pb2.EMIsopotentialRogoRequest.FromString,
2548+
response_serializer=kwprocess__pb2.EMIsopotentialRogoReply.SerializeToString,
2549+
),
24862550
'CreateEMSolverBem': grpc.unary_unary_rpc_method_handler(
24872551
servicer.CreateEMSolverBem,
24882552
request_deserializer=kwprocess__pb2.EMSolverBemRequest.FromString,
@@ -5013,6 +5077,74 @@ def CreateEMMat002(request,
50135077
options, channel_credentials,
50145078
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
50155079

5080+
@staticmethod
5081+
def CreateEMMat004(request,
5082+
target,
5083+
options=(),
5084+
channel_credentials=None,
5085+
call_credentials=None,
5086+
insecure=False,
5087+
compression=None,
5088+
wait_for_ready=None,
5089+
timeout=None,
5090+
metadata=None):
5091+
return grpc.experimental.unary_unary(request, target, '/kwgrpc.kwC2S/CreateEMMat004',
5092+
kwprocess__pb2.EMMat004Request.SerializeToString,
5093+
kwprocess__pb2.EMMat004Reply.FromString,
5094+
options, channel_credentials,
5095+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
5096+
5097+
@staticmethod
5098+
def CreateEMIsopotential(request,
5099+
target,
5100+
options=(),
5101+
channel_credentials=None,
5102+
call_credentials=None,
5103+
insecure=False,
5104+
compression=None,
5105+
wait_for_ready=None,
5106+
timeout=None,
5107+
metadata=None):
5108+
return grpc.experimental.unary_unary(request, target, '/kwgrpc.kwC2S/CreateEMIsopotential',
5109+
kwprocess__pb2.EMIsopotentialRequest.SerializeToString,
5110+
kwprocess__pb2.EMIsopotentialReply.FromString,
5111+
options, channel_credentials,
5112+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
5113+
5114+
@staticmethod
5115+
def CreateEMIsopotentialConnect(request,
5116+
target,
5117+
options=(),
5118+
channel_credentials=None,
5119+
call_credentials=None,
5120+
insecure=False,
5121+
compression=None,
5122+
wait_for_ready=None,
5123+
timeout=None,
5124+
metadata=None):
5125+
return grpc.experimental.unary_unary(request, target, '/kwgrpc.kwC2S/CreateEMIsopotentialConnect',
5126+
kwprocess__pb2.EMIsopotentialConnectRequest.SerializeToString,
5127+
kwprocess__pb2.EMIsopotentialConnectReply.FromString,
5128+
options, channel_credentials,
5129+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
5130+
5131+
@staticmethod
5132+
def CreateEMIsopotentialRogo(request,
5133+
target,
5134+
options=(),
5135+
channel_credentials=None,
5136+
call_credentials=None,
5137+
insecure=False,
5138+
compression=None,
5139+
wait_for_ready=None,
5140+
timeout=None,
5141+
metadata=None):
5142+
return grpc.experimental.unary_unary(request, target, '/kwgrpc.kwC2S/CreateEMIsopotentialRogo',
5143+
kwprocess__pb2.EMIsopotentialRogoRequest.SerializeToString,
5144+
kwprocess__pb2.EMIsopotentialRogoReply.FromString,
5145+
options, channel_credentials,
5146+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
5147+
50165148
@staticmethod
50175149
def CreateEMSolverBem(request,
50185150
target,

src/ansys/dyna/core/pre/Server/kwserver.py

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2597,7 +2597,8 @@ def CreateEMMat001(self, request, context):
25972597
mid = request.mid
25982598
mtype = request.mtype
25992599
sigma = request.sigma
2600-
card1 = str(mid) + "," + str(mtype) + "," + str(sigma) + ",,,,1e28"
2600+
eosid = request.eosid
2601+
card1 = str(mid) + "," + str(mtype) + "," + str(sigma)+ ","+ str(eosid) + ",,,1e28"
26012602
newk = "*EM_MAT_001\n" + card1
26022603
self.kwdproc.newkeyword(newk)
26032604
msg = "*EM_MAT_001 Created..."
@@ -2610,24 +2611,59 @@ def CreateEMMat002(self, request, context):
26102611
sigma = request.sigma
26112612
eosid = request.eosid
26122613
murel = request.murel
2613-
card1 = (
2614-
str(mid)
2615-
+ ","
2616-
+ str(mtype)
2617-
+ ","
2618-
+ str(sigma)
2619-
+ ","
2620-
+ str(eosid)
2621-
+ ","
2622-
+ str(murel)
2623-
+ ",0,1e28"
2624-
)
2614+
card1 = str(mid)+ ","+ str(mtype)+ ","+ str(sigma)+ ","+ str(eosid)+ ","+ str(murel)+ ",0,1e28"
26252615
newk = "*EM_MAT_002\n" + card1
26262616
self.kwdproc.newkeyword(newk)
26272617
msg = "*EM_MAT_002 Created..."
26282618
print(msg)
26292619
return kwprocess_pb2.EMMat002Reply(answer=0)
2620+
2621+
def CreateEMMat004(self, request, context):
2622+
mid = request.mid
2623+
mtype = request.mtype
2624+
sigma = request.sigma
2625+
card1 = str(mid)+ ","+ str(mtype)+ ","+ str(sigma)
2626+
newk = "*EM_MAT_004\n" + card1
2627+
self.kwdproc.newkeyword(newk)
2628+
msg = "*EM_MAT_004 Created..."
2629+
print(msg)
2630+
return kwprocess_pb2.EMMat004Reply(answer=0)
26302631

2632+
def CreateEMIsopotential(self, request, context):
2633+
isoid = self.kwdproc.get_data(gdt.KWD_EM_ISOPOTENTIAL_LASTID) + 1
2634+
settype = request.settype
2635+
setid = request.setid
2636+
card1 = str(isoid)+ ","+ str(settype)+ ","+ str(setid)
2637+
newk = "*EM_ISOPOTENTIAL\n" + card1
2638+
self.kwdproc.newkeyword(newk)
2639+
msg = "*EM_ISOPOTENTIAL Created..."
2640+
print(msg)
2641+
return kwprocess_pb2.EMIsopotentialReply(id=isoid)
2642+
2643+
def CreateEMIsopotentialConnect(self, request, context):
2644+
conid = self.kwdproc.get_data(gdt.KWD_EM_ISOPOTCONNECT_LASTID) + 1
2645+
contype = request.contype
2646+
isoid1 = request.isoid1
2647+
isoid2 = request.isoid2
2648+
val = request.val
2649+
card1 = str(conid)+ ","+ str(contype)+ ","+ str(isoid1)+ ","+ str(isoid2)+ ","+ str(val)
2650+
newk = "*EM_ISOPOTENTIAL_CONNECT\n" + card1
2651+
self.kwdproc.newkeyword(newk)
2652+
msg = "*EM_ISOPOTENTIAL_CONNECT Created..."
2653+
print(msg)
2654+
return kwprocess_pb2.EMIsopotentialConnectReply(id=conid)
2655+
2656+
def CreateEMIsopotentialRogo(self, request, context):
2657+
isoid = request.isoid
2658+
settype = request.settype
2659+
setid = request.setid
2660+
card1 = str(isoid)+ ","+ str(settype)+ ","+ str(setid)
2661+
newk = "*EM_ISOPOTENTIAL_ROGO\n" + card1
2662+
self.kwdproc.newkeyword(newk)
2663+
msg = "*EM_ISOPOTENTIAL_ROGO Created..."
2664+
print(msg)
2665+
return kwprocess_pb2.EMIsopotentialRogoReply(id=isoid)
2666+
26312667
def CreateEMSolverBem(self, request, context):
26322668
reltol = request.reltol
26332669
maxite = request.maxite
14.7 KB
Binary file not shown.
6.5 KB
Binary file not shown.

0 commit comments

Comments
 (0)